void Partition(ElemSet *a, int n) {
    int upper_end = 0;       // 指向大写字母部分的末尾
    int digit_end = 0;       // 指向数字部分的末尾
    int lower_start = n - 1; // 指向小写字母部分的起始

    while (digit_end <= lower_start) {
        if (isupper(a[digit_end])) { 
            // 如果是大写字母，交换到大写部分的末尾
            char temp = a[upper_end];
            a[upper_end] = a[digit_end];
            a[digit_end] = temp;
            upper_end++;
            digit_end++;
        } else if (isdigit(a[digit_end])) { 
            // 如果是数字，留在中间
            digit_end++;
        } else if (islower(a[digit_end])) { 
            // 如果是小写字母，交换到小写部分的前面
            char temp = a[digit_end];
            a[digit_end] = a[lower_start];
            a[lower_start] = temp;
            lower_start--;
        }
    }
}